package com.zimmor.redis;

import redis.clients.jedis.Jedis;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @Author:zimmor
 * @Date: 2021/7/4 13:21
 * @Description redis Java Api使用
 * @version: 1.0.0
 */

public class RedisDemo1 {

    //建立了连接的redis客户端jedis
    private static Jedis jedis;
    public static void main(String[] args) {
        //redis的java Api使用和redis的命令很类似
        //和服务器建立连接
        connectServer("192.168.204.129");
        //String类型
        testString();
        //Hash类型
        testHash();
        //List类型
        testList();
        //Set类型
        testSet();
        //Zset类型
        testZset();
    }

    /**
     * redis Zset类型
     */
    private static void testZset() {
        jedis.zadd("myZset", 5, "spring");
        jedis.zadd("myZset", 1, "springboot");
        Long code = jedis.zadd("myZset", 2, "springmvc");
        Long code2 = jedis.zadd("myZset", 2, "springData");
        Set<String> myZset = jedis.zrange("myZset", 0, 10);
        System.out.println("Zset类型 返回值1:" + code);
        System.out.println("Zset类型 返回值2：" + code2);
        System.out.println("Zset类型 返回所有结果" + myZset);
    }

    /**
     * redis Set类型
     */
    private static void testSet() {
        Long code = jedis.sadd("nums", "1", "2", "5", "3", "7");
        Set<String> numbers = jedis.smembers("nums");
        System.out.println("Set类型返回值:" + code);
        System.out.println("Set类型返回结果" + numbers);
    }

    /**
     * redis List类型
     */
    private static void testList() {
        jedis.lpush("language", "英语");
        jedis.rpush("language", "汉语");
        Long code = jedis.lpush("language", "法语", "德语");
        List<String> language = jedis.lrange("language", 0, 10);
        System.out.println("List类型返回值：" + code);
        System.out.println("List类型返回结果：" + language);
    }

    /**
     * 和redis服务器建立连接
     * @param hostIp 主机ip
     */
    private static void connectServer(String hostIp) {
        jedis = new Jedis(hostIp);
    }

    /**
     *redis String类型的操作
     */
    private static void testString() {
        String code = jedis.set("name", "nacos");
        String result = jedis.get("name");
        System.out.println("String类型 返回值" + code );
        System.out.println("String类型 获取结果：" + result);
    }

    /**
     * redis Hash类型的操作
     */
    private static void testHash() {
        //redis中的hash对应的是java中的key-value都为字符串的Map
        Map myHash = new HashMap();
        myHash.put("name", "niko");
        myHash.put("age", "45");
        String code = jedis.hmset("teacher", myHash);
        String name = jedis.hget("teacher", "name");
        //获取map中的所有元素
        Map<String, String> teacher = jedis.hgetAll("teacher");
        System.out.println("Hash的返回值" + code );
        System.out.println("Hash类型 获取name元素的值：" + name);
        System.out.println("Hash类型 获取的所有元素的结果" + teacher);
    }
}
